﻿//////////////////////////////////////////////////////////////////
//
// Point3D.cs
//
// Copyright (c) 2012 Dan Pike.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//

namespace Geometry
{
   ////////////////////////////////////////////////////////////////////////
   //
   public class Point3D
   {
      public Point3D(float argX, float argY, float argZ)
      {
         x = argX;
         y = argY;
         z = argZ;
      }
      
      public Point3D(Point3D src)
      {
         x = src.x;
         y = src.y;
         z = src.z;
      }

      public Point3D Add(Point3D offset)
      {
         return new Point3D(x + offset.x, y + offset.y, z + offset.z);
      }

      public Point3D Add(float offsetX, float offsetY, float offsetZ)
      {
         return new Point3D(x + offsetX, y + offsetY, z + offsetZ);
      }

      public Point3D Mul(float scale)
      {
         return new Point3D(x * scale, y * scale, z * scale);
      }

      public float x;
      public float y;
      public float z;

      public string ToString(string format)
      {
         return string.Format("[{0}, {1}, {2}]", x.ToString(format), y.ToString(format), z.ToString(format));
      }

      public override string ToString()
      {
         return string.Format("[{0}, {1}, {2}]", x, y, z);
      }
   }
}
